Лабораторная работа №3

Шифрование гаммированием

Тазаева Анастасия Анатольевна

Российский университет дружбы народов

2025-10-04

Информация

Докладчик

  • Тазаева Анастасия Анатольевна
  • студент группы НФИмд-02-25
  • Российский университет дружбы народов им. П. Лумумбы
  • 1032259385@pfur.ru

Введение

Цель работы

Ознакомиться с шифрованием гаммированием. Реализовать его.

Задачи

Реализовать на языке программирования Julia:

  1. Шифрование гаммированием.

Теоретическое введение

Гаммирование - это метод шифрования, при котором символы исходного текста складываются (или иным образом комбинируются) с символами некоторой случайной последовательности, называемой гаммой. Криптографическая стойкость данного метода обеспечивается за счёт уникальной, истинно случайной гаммы, длина которой не меньше длины шифруемого сообщения, при этом каждый символ исходного текста преобразуется с помощью соответствующего символа гаммы. Принцип обратимости процесса позволяет восстановить исходный текст путём вычитания той же самой гаммы из зашифрованного сообщения, что делает гаммирование одним из наиболее надежных методов симметричного шифрования при соблюдении всех требований к генерации и использованию гаммы. Основное преимущество метода заключается в том, что при правильном применении (одноразовость гаммы и её истинная случайность) он обеспечивает абсолютную криптостойкость, доказанную математически.

Программный код

Шифрование гаммированием

function gamma_encryption(text, gamma_code)
    # massiv ASCII-kodov kirillicy + simvolov
    alphabet = vcat(1040:1045, 1025, 1046:1071, 32:33, 44, 46, 63, 1072:1077, 1105,1078:1103) 
    # println(alphabet)
    # filtryem text, izvestnye simvoly ostautsya
    filtr = filter(x -> findfirst(isequal(Int(only(x))), alphabet) != nothing, text)
    #razbivaem text na simvoly
    edited_text = Int.(only.(split(filtr,"")))
    n = length(edited_text)
    #massiv xranit poryadkovyi nomer kajdogo simvola v alfavite
    por_num = [findfirst(isequal(edited_text[i]), alphabet) for i in 1:n]

Шифрование гаммированием

# propisnye -> zaglavnye
    for i in 1:n
        if por_num[i] > 38
            por_num[i] -= 38
        end
    end
    #rejem na kyso4ki gamma_code, preobrazyija ego v simvolnyi format b ,thtv int-ovoe zna4enie  ot kjdogo simvola
    edited_code = [findfirst(isequal(i), alphabet) for i in Int.(only.(split(gamma_code,"")))]
    m = length(edited_code)
    temp = [alphabet[mod(por_num[i]+edited_code[mod(i-1,m)+1]-1,38)+1] for i in 1:n]
    result=""
    result*=join(Char.(temp))
    return result
end
end

Шифрование гаммированием. Результат работы программного кода

Рисунок 1: Шифрование гаммированием. Пример отработки

Заключение

Вывод

В ходе лабораторной работы были изучено и реализовано шифрование гаммированием.